import sheep from '@/sheep';

/**
 * 页面数据传输工具类
 * 用于在不同页面之间传递数据，支持持久化存储
 */
class PageTransfer {
  /**
   * 获取 pageData store 实例
   * @returns {Object} pageData store 实例
   */
  getStore() {
    return sheep.$store('pageData');
  }

  /**
   * 设置通用数据
   * @param {String} key 数据键名
   * @param {Any} value 数据值
   */
  setData(key, value) {
    const store = this.getStore();
    store.setCommonData(key, value);
    return this;
  }

  /**
   * 获取通用数据
   * @param {String} key 数据键名
   * @param {Any} defaultValue 默认值（如果数据不存在）
   * @returns {Any} 存储的数据或默认值
   */
  getData(key, defaultValue = null) {
    const store = this.getStore();
    return store.getCommonData(key, defaultValue);
  }

  /**
   * 设置企业端数据
   * @param {String} key 数据键名
   * @param {Any} value 数据值
   */
  setQyData(key, value) {
    const store = this.getStore();
    store.setModuleData('qy', key, value);
    return this;
  }

  /**
   * 获取企业端数据
   * @param {String} key 数据键名
   * @param {Any} defaultValue 默认值（如果数据不存在）
   * @returns {Any} 存储的数据或默认值
   */
  getQyData(key, defaultValue = null) {
    const store = this.getStore();
    return store.getModuleData('qy', key, defaultValue);
  }

  /**
   * 设置消防端数据
   * @param {String} key 数据键名
   * @param {Any} value 数据值
   */
  setXfData(key, value) {
    const store = this.getStore();
    store.setModuleData('xf', key, value);
    return this;
  }

  /**
   * 获取消防端数据
   * @param {String} key 数据键名
   * @param {Any} defaultValue 默认值（如果数据不存在）
   * @returns {Any} 存储的数据或默认值
   */
  getXfData(key, defaultValue = null) {
    const store = this.getStore();
    return store.getModuleData('xf', key, defaultValue);
  }

  /**
   * 设置其他端数据
   * @param {String} key 数据键名
   * @param {Any} value 数据值
   */
  setOtherData(key, value) {
    const store = this.getStore();
    store.setModuleData('other', key, value);
    return this;
  }

  /**
   * 获取其他端数据
   * @param {String} key 数据键名
   * @param {Any} defaultValue 默认值（如果数据不存在）
   * @returns {Any} 存储的数据或默认值
   */
  getOtherData(key, defaultValue = null) {
    const store = this.getStore();
    return store.getModuleData('other', key, defaultValue);
  }

  /**
   * 设置临时数据（不会被持久化）
   * @param {String} key 数据键名
   * @param {Any} value 数据值
   */
  setTempData(key, value) {
    const store = this.getStore();
    store.setTempData(key, value);
    return this;
  }

  /**
   * 获取临时数据
   * @param {String} key 数据键名
   * @param {Any} defaultValue 默认值（如果数据不存在）
   * @returns {Any} 存储的数据或默认值
   */
  getTempData(key, defaultValue = null) {
    const store = this.getStore();
    return store.getTempData(key, defaultValue);
  }

  /**
   * 清除指定数据
   * @param {String} type 数据类型 (common|qy|xf|other|temp)
   * @param {String} key 数据键名，如果不提供则清除该类型的所有数据
   */
  clearData(type, key) {
    const store = this.getStore();
    store.clearData(type, key);
    return this;
  }

  /**
   * 重置所有数据
   */
  resetAll() {
    const store = this.getStore();
    store.resetAll();
    return this;
  }
}

export default new PageTransfer(); 